#ifndef GROUPE_H
#define GROUPE_H

#include"globalheader.h"
#include"etudiant.h"
#include"module.h"

typedef std::set<Etudiant*, point_less<Etudiant> > EnsEtu;
typedef std::set<Module*> EnsMod;

class Groupe{
	private:
		const std::string nomGrp_;
		EnsEtu member_;
		EnsMod suivi_;
		
	public:
		Groupe(const std::string& nomGrp);
		Groupe(const std::string& nomGrp, const EnsEtu& memb);
		Groupe(const std::string& nomGrp, const EnsEtu& memb, const EnsMod& suivi);
		
		const std::string getNomGroupe() const;
		EnsEtu* getEnsEtudiant();
		EnsMod* getEnsModule();
		
		void ajouterModule(Module* mod);
		void affecterEtu(Etudiant* etu);
		void retirerEtu(Etudiant* etu);
		void retirerModule(Module* mod);

        bool operator<(const Groupe& e) const;
};

	std::ostream& operator<<(std::ostream& os, Groupe* g);

    class ComparatorGroupe
    {
        bool operator()(const Groupe& e1, const Groupe& e2);
    };

typedef std::set<Groupe*, point_less<Groupe> > ensGroupe;

    class EnsembleGrp
    {
    private:
        ensGroupe listGroupe_;

    public:
        EnsembleGrp();
        void ajoutGroupe(Groupe* ens);
        void ajoutEnsGroupe(ensGroupe eEns);

        void supprGroupe(Groupe* grp);

        ensGroupe getEnsembleGrp();
    };
#endif
